Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

получения результата SQL-запроса генерируемого хранимой процедурой (Svem)
Author Message
Svem
Заглянувший



Joined: 11 Jan 2007
Posts: 12
Карма: 1
   поощрить/наказать


PostPosted: Mon Jun 11, 2007 6:48 pm (написано за 12 минут 40 секунд)
   Post subject: получения результата SQL-запроса генерируемого хранимой процедурой
Reply with quote

Вопрос:
как получить результат SQL-запроса генерируемого хранимой процедурой?
т.е. имеем хран. процедуру например:
Code (SQL): скопировать код в буфер обмена
PROCEDURE `get_object_event`(IN _objectId INT)
BEGIN

 SELECT `event_id`, `event`.`remark`, `state`.`name` state_name, `event`.`date`, `user`.`login` `user`
 
 FROM `event`
 
 LEFT JOIN `state` USING(`state_id`)
 LEFT JOIN `user` ON `user`.`user_id` = `event`.`user_id`
 
 WHERE `object_id` = _objectId
 ORDER BY `event`.`date` ASC;

END
ну в смысл ее можно не углубляться... главное результатом её выполнения будет выборка. Это сделано так потому, что иногда нам нужно чтоб в зависимости от условий процедура ген. выборки различных запросов....

вот mysql_query ругается: "PROCEDURE get_object_event can't return a result set in the given context"...

1. Возможно ли средствами библиотеки mysql получить выборку а php?

Идем далее... берем библиотеку mysqli. Ура все работает!!! mysqli_query и далее mysqli_fetch_accos получаем желаемый результат.
Но! После первого запроса
Code (php): скопировать код в буфер обмена
$this->dbh->query("CALL get_object_event('30'));
Делаем второй запрос, например
Code (php): скопировать код в буфер обмена
$this->dbh->query("CALL get_object_event('32'));
,
или другой на получение выборки хр.пр.

получаем ошибку сервера mysql:
"Commands out of sync; you can't run this command now"

Читаем доки:
A.2.12. Ошибка в клиенте Commands out of sync
Если получена ошибка Commands out of sync; you can't run this command now в клиентском коде, то клиентские функции вызываются в неправильном порядке!

Это может произойти, например, если используется mysql_use_result() и делается попытка выполнить новый запрос до того, как вызвана mysql_free_result(), или если клиент пытается выполнить два возвращающих данные запроса без обращения к mysql_use_result() либо mysql_store_result() в промежутке между ними.

Ок, делаем как надо: в начале запрос, затем извлекаем результат
Code (php): скопировать код в буфер обмена
public function next (www.php.net/next)()
        {
                if ($this->done)
                {
                        return false;
                }
                $offset = $this->currIndex + 1;
                if (empty (www.php.net/empty)($this->result[$offset]))
                {
                        $row = $this->stmt->fetch_assoc();
                        if (!$row)
                        {
                                [color=red]print (www.php.net/print) "=".$this->stmt->free_result();[/color]
                                $this->done = true;
                                return false;
                        }
                        $this->result[$offset] = $row;
                        ++$this->rowIndex;
                        ++$this->currIndex;
                        return $this;
                }
                else
                {
                        ++$this->currIndex;
                        return $this;
                }
        }
знак "=" есть на экане, т.е.
Code (php): скопировать код в буфер обмена
$this->stmt->free_result()
выполняется.
И все-равно, один фиг. такая же ошибка по второго mysqli_query (((

блин, может не так mysqli юзаю?... Кто-нить встречался с такой проблемой?

Короче вопрос остается открытым
Вопрос:
как получить результат SQL-запроса генерируемого хранимой процедурой? или несколько на странице?
Back to top
View user's profile Send private message
Svem
Заглянувший



Joined: 11 Jan 2007
Posts: 12
Карма: 1
   поощрить/наказать


PostPosted: Tue Jun 12, 2007 1:07 am (спустя 6 часов 18 минут; написано за 1 минуту 6 секунд)
   Post subject:
Reply with quote

Кстати, насчет mysqli нарыл, что это баг...
www.softtime.ru/forum/read.php?id_forum=3&id_theme=26082
Back to top
View user's profile Send private message
amikhailov
Участник форума



Joined: 11 Nov 2004
Posts: 180
Карма: 5
   поощрить/наказать

Location: Екатеринбург

PostPosted: Mon Jun 25, 2007 9:56 am (спустя 13 дней 8 часов 48 минут; написано за 44 секунды)
   Post subject:
Reply with quote

Насколько я знаю, процедура не возвращает какого-то осмысленного результата. Этим занимаются функции.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML